package com.zb.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.zb.entity.AdmInfo;
import com.zb.entity.LoginToken;
import com.zb.entity.ZjAdmAccount;
import com.zb.entity.dto.*;
import com.zb.exception.LoginException;
import com.zb.exception.RegisterException;
import com.zb.exception.SMSException;

/**
 * <p>
 * 后台账号表 服务类
 * </p>
 *
 * @author WEN
 * @since 2023-07-07
 */
public interface ZjAdmAccountService extends IService<ZjAdmAccount> {
    /**
     * 注册账号
     * @param accountDto
     */
    void registerAccount(AccountDto accountDto) throws RegisterException;

    /**
     * 登录
     * @param loginDto
     * @return
     */
    LoginToken login(LoginDto loginDto) throws LoginException, SMSException;

    /**
     * 根据ID获取账号信息
     * @param id
     * @return
     */
    AccountLoginInfo getInfo(Long id);

    /**
     * 更改登录密码
     * @param passwordDto 密码对象
     */
    void updatePassword(PasswordDto passwordDto) throws LoginException, SMSException;

    /**
     * 更改账号信息
     * @param id 账号ID
     * @param accountInfoDto 账号信息对象
     */
    void updateAccountInfo(Long id, AccountInfoDto accountInfoDto);

    /**
     * 更换手机号
     * @param admInfo 账号信息
     * @param newPhone 新手机号
     * @param code 验证码
     */
    void updatePhone(AdmInfo admInfo, String newPhone, String code) throws RegisterException, SMSException;

    /**
     * 更换登录账号
     * @param admInfo 登录账号信息对象
     * @param account 登录账号
     * @param code 验证码
     */
    void updateAccount(AdmInfo admInfo, String account, String code) throws RegisterException, SMSException;

    /**
     * 更新最新登录时间
     * @param id
     */
    void updateLastLoginTime(Long id);


}
